import Vue from "vue";
import store from "@/store";
import { isString, isArray } from "@/utils/validate";
import settings from "@/settings";

// you can set in settings.js
// errorLog:'production' | ['production', 'development']
const { errorLog: needErrorLog } = settings;

function checkNeed() {
	const env = process.env.NODE_ENV;
	if (isString(needErrorLog)) {
		return env === needErrorLog;
	}
	if (isArray(needErrorLog)) {
		return needErrorLog.includes(env);
	}
	return false;
}

if (checkNeed()) {
	Vue.config.errorHandler = function(err, vm, info, a) {
		// Don't ask me why I use Vue.nextTick, it just a hack.
		// detail see https://forum.vuejs.org/t/dispatch-in-vue-config-errorhandler-has-some-problem/23500
		Vue.nextTick(() => {
			store.dispatch("errorLog/addErrorLog", {
				err,
				vm,
				info,
				url: window.location.href
			});
			console.error(err, info);
		});
	};
}
